{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import torch\n",
    "\n",
    "device = torch.device('cpu')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ODE vector field visualizations\n",
    "This notebook shows examples of functions Neural ODEs cannot approximate and how this affects the learned vector fields."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create an ODE function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from anode.models import ODEFunc\n",
    "\n",
    "data_dim = 1  # We model 1d data to easily visualize it\n",
    "hidden_dim = 16\n",
    "\n",
    "# Create a 3-layer MLP as the ODE function f(h, t)\n",
    "odefunc = ODEFunc(device, data_dim, hidden_dim, time_dependent=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualize vector field of ODE function\n",
    "We can visualize what the randomly initialized ODE function's vector field looks like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3WlwW+ed5/vvww37wkVcQSxctFmWZYmkuUCSrbhjO0k77cnETqZu3ZmpnnL3rel7607dqZru6qnbt3petDsz0+l0x7GjJHbsTGwnthPLi7wvkWNZsmQt1mpSlrWQoiTuWEiCAPHcFxJOA6RkCwRE0M7/U/UUDoBzeH46OOf5n3NA8VFaa4QQQohrVVToAEIIIb5YpHAIIYTIihQOIYQQWZHCIYQQIitSOIQQQmRFCocQQoisSOEQQgiRFSkcQgghsiKFQwghRFZKCh3geqiqqtJ+v7/QMYQQ4gvjww8/HNZaL7uWeb+UhcPv97N3795CxxBCiC8MpdTpa51XblUJIYTIihQOIYQQWZHCIYQQIitSOIQQQmRFCkcOQqEQk5OThY5BNBplKYyrEo/HCx0BrfWS2BZCfJkV9LeqlFKPAN8ALmqt11zh/VuBbcCnl1/6jdb6bxcv4WeLx+P81//6X7FYLNTX1xutrq6OxsZGSktLFyXHJ598wk9+8hPq6+tpaGgwHhsaGnA4HCilFiXH9u3b+eCDD/B4PHg8HhoaGvB4PFRVVVFUtHjnKD/+8Y+JRCJ4PB4aGxvxeDzU19cv2ucBMD09zUMPPYTT6aSxsRGv10tjYyM2m23RMgAMDQ3x5JNP4vF48Hq9eL1eli1btmj7RMrx48fZtWsXPp8Pn8+3qMdHul27dnH+/Hn8fj9+vx+3273oGQDefPNNSktLCQQCNDQ0LOrxkZJMJnnjjTeor68nEAhktWyhfx3358APgcc/Y553tdbfWJw488XjcUZHRxkZGTHa8PCwMR2LxYjFYoyPj3P06FFWrlzJ7bffTklJfjdtIpFgdHTUaCMjIxnTMzMznDp1ilOnTgGwcuVKtmzZwtq1a/OeY3x8nLGxMWP9qenh4WGjHThwAIDly5dz5513csMNN+Q1RzKZZGJigrGxMSNPqp0/f57BwUH6+vqM+ZcvX869995LY2Nj3nNEIhHGxsaYmJhgfHzcaCMjIxw/fpwPPvjAmH/9+vXce++9lJeX5zWH1ppoNMrExMS8dubMGY4cOWLMa7FY6O7u5u6778ZsNuc9RywWY2JiglAoZLSJiQn27NnD+++/D0BRURH19fV0dnayZcsWiouL85oDLh27oVCIcDhstMHBQV577TVjHrfbjc/no6Ojgw0bNlyXgpraR1ItHA4zMDDAe++9B0BpaSk+n49AIMD69etpamrKewb4l88mEokQjUaJRCL09vby7LPPZv2zClo4tNY7lFL+QmZINzo6yo4dOzIKw8TEhPG+yWSisrKSqqoqfD4f69evZ/fu3QwODtLR0cFXvvIVPB5PzjlOnz7N3r17MwpWKBQy3i8pKaGiooKKigoqKytpbW3lrbfeIhaLccstt7Bly5a85Dh8+DBHjx41CsPY2BihUMi4FVRUVITb7aa8vJyKigpWr17N4OAgpaWl3HLLLdx22215ybFz507Onj1rFIbx8XEmJiYybkk5nU4jS01NjZGjo6ODW2+9Fa/Xm1MGrTWvvPJKRmEYHx8nFAqRTCaN+cxmM263G7fbjdVqBS59Xu3t7dx6663k+h9To9Eob7/99rziEAqFmJ2dNeYrLi7G6XTicrmMM/uSkhLa2trYvHkzgUAgp07ywoULfPDBB0ZRSC8Sc29Z2mw2nE4nJSUlJBIJSkpKWL9+PZs2baKlpSWnHCdOnODIkSOEw+GMIhEKhYjFYhnzlpSU4HQ6UUqhtaakpITW1laCwSArVqzIKcf+/fs5ffo04XDYKA6pQjE5OTnv9ml6wZ6dncXpdLJy5cqc949U/5UqDqkCkZpO30dyUegrjmvRpZQ6CJwD/rPW+siVZlJK3Q/cDyy4k4jFYhw8eDCjMFRWVhrFwmq1ZuxcWmuUUnR0dOB0Ohe0zisZGRnh6NGjVFZW4vf7jRypQjH39lM4HKaoqIiNGzficDjyluP06dOcOHGCiooKmpqajAJRUVFBeXk5Lpcr4xL75MmTuFwugsFgXm/JHD9+nIsXL1JeXk5zc7NRIFLN5XJlXOHt2rWLpqamvOZQSrF//35KSkpwu91GDpfLZRQKl8uV0SE899xztLW10dPTk7ccs7Oz7N69G5fLhcvlorm52ZhOb6l9VWvNww8/zG233UZ3dzd2uz0vOcbHx9m7dy9OpxOn00kgEDCmXS4XDofDeCwuLiYWi/E//+f/pL29na6urrzl6O/v58CBAzgcDhwOBz6fD6fTaTxPnzaZTJw/f56HH36YjRs30tnZmbccH3/8Mb29vTgcDux2O42NjdjtduP53OmDBw/y3HPPEQwG6ezszFv/sW/fPsLhMHa7HZvNRl1dnTGdekxN2+123n77bXbv3k1PTw9bt2695vWoQn+RePmK48WrfMfhBJJa64hS6mvAD7TWrZ/3M9va2rT8z3FRaKkTi0JnAAqeI5FIUFxcXPAc09PTmEymgucIhUKL+v3j1Vy8eNH4zksp9aHWuu1allvSv1WltQ5prSOXp7cDpUqpqgLHEuKaFLpTSGVYCjlKSkqWRA6z2bwkcqRumRVadXX1gnIs6cKhlKpVl/9VSqkOLuUdKWwqIYT4w1boX8d9ErgVqFJK9QN/A5QCaK0fBv418H8opRLAFPAdXeh7a0II8Qeu0L9V9d3Pef+HXPp1XSGEEEvEkr5VJYQQYumRwiGEECIrUjiEEEJkRQqHEEKIrEjhEEIIkRUpHEIIIbIihUMIIURWpHAIIYTIihQOIYQQWZHCIYQQIitSOIQQQmRFCocQQoisSOHIweTkZN6GYszFUsgAzBseUwjx5fRFGDp2yQqHw/zVX/0VlZWVeDweGhoajOZ2uxdtoJZ9+/axbds2PB4PjY2NeDwePB4PFRUVizpYzPPPP09fXx+NjY00Njbi9Xqpq6ujuLh40TJorXn88ceZnZ3F6/Xi8/lobGzMGNJ1McRiMR5//HGWLVuG3+/H5/Mt6j6RMjw8zPbt2wkEAvj9furr6xf180g5ceIEvb29Rg6LxbLoGQAOHjzI9PQ0zc3NVFZWFmwwpQ8//BC3243P58sY9ngxJZNJDh06ZAz7mw0pHJ8jkUgwNjbG6OjovDY2NsbMzAwDAwMMDAwAUF9fz5YtW+js7KS0tDRvOZLJJBMTE4yNjTE+Pp7xODo6ytDQEENDQ+zfvx+AyspK7rrrLoLBYF4PjmQySTgcZnx8nPHxcSPTxMQEFy9epK+vj76+PmP+ZcuW8Z3vfIc1a+aNDJwTrTXRaJRQKMTExERGO3/+PCdPnmT37t3ApVHwWlpauO+++2hsbMx7jlgsRigUmtcGBwdJH8LY6XSyatUq7rnnHsrLy/OaAyAejxOJRAiFQoTDYWP6yJEjvPfeewCUlpbi9XpZsWIFd9xxx3UpqFprJicniUQiRpuYmOCll14ikUiglKK2tpZAIEBrayu33HLLdStm8XicaDTK5OQk0WiUoaEhnn76aeDS59HU1ERzczPNzc00NTVdt0KS2k8mJyeZnJzk9OnTbN26lZKSEvx+P83NzbS0tNDc3Jy38ek/K8v09DTT09N88MEH/OhHP6K6ujqrnyGFI83IyAhvvfVWRnEIhULG+yUlJZSXl1NRUUFFRQWBQID9+/czODjIjTfeyFe+8hVWrFiR88736aefsmfPHsbGxow2MTGRcSvI4XDgdrspLy/H4/Fw7tw5pqamWLVqFbfddhs33ngjRUW53Yk8ePAgR48eNYrE+Pg4oVCIZDJpzGM2mykvL8flcuF2u43XV61axebNm7nppptyzrFjxw7Onj2bURxCoVDGLbri4mKcTiculyujE1q+fDmbNm3i5ptvzvnM7oUXXjDWnd7i8XjGfFarFafTmZGvubmZTZs2sWHDhpxOKKLRKK+//jrhcHhem56ezpi3uLgYh8PBzMyM8VpDQwNdXV20t7fnVDQGBwfZtWtXRnFItWg0Ou+2ZVlZmfFaaix2j8fD2rVrcyoavb29HD58mGg0esU297NJFwqFGBgYwOfzUV5entNxu3fvXk6fPm0UhqmpKWM61a50KzeRSHDixAmGh4eBSydauRSOt99+m9HRUaampow2PT2d8TwWi83LcvHixazWI4UjzczMDH19fVRUVNDc3Ex7e7tRJCoqKuYNLp9MJlFK0dnZybJly/KWY3x8nJMnT1JeXk5TU5NRINIf0zvBiYkJioqKuPXWW6mtrc1bjvPnz3P27FlcLhfNzc1GcUgvFCaTyZi/t7cXh8PB5s2b85rj008/ZWhoyDhDdLlc85rNZjM+m3feeQev18vmzZupq6vLW45jx44ZBSp1eT+3ORwO47N58sknUUqxadMm6uvr85IhmUxy8OBBHA4HDocDn89nTM9tqdtB3//+96mrq2Pjxo14PJ685AiHwxw+fBi73Y7dbsfj8RjTc1vqs/mbv/kbVq9eTU9PD36/Py9n9+fPn+fo0aPYbDZsNhu1tbXYbDasVqvxWnqbnJzkgQceYP369XR3d9PS0pKXHJ9++im9vb1YrVYsFgsVFRV4PB6sVqvxms1mw2KxYLVaOXXqFL/85S+5+eab6erqYuXKlTmfYAEcPnyYUCiExWLBbDbjcDiorq42nlssloy2Z88e3n33XdauXZvVetSX8QvNtrY2nX6LQPxhSZ3RFtrs7GxBvk9Ip7UmHo9TVlZW0BzT09MopTJONAphbGwMq9Va8Bz9/f1UVVUt+ndvcx07dgyfz4fVakUp9aHWuu1alpMrDvGlsxSKBlDwogGXtkWhiwZQ8A4y5Xp8t7QQ+bryy9WqVasWtJz8Oq4QQoisSOEQQgiRFSkcQgghsiKFQwghRFakcAghhMhKQQuHUuoRpdRFpdThq7yvlFL/pJQ6oZT6SCm1frEzCiGEyFToK46fA3d+xvt3Aa2X2/3AQ4uQSQghxGcoaOHQWu8ARj9jlm8Cj+tLdgFupVT+/iuwEEKIrBX6iuPzNABn0573X35tHqXU/UqpvUqpvUNDQ4sSTggh/hAt9cJxzbTWW7XWbVrrtnz+3SghhBCZlnrhGADS/w625/JrQgghCmSpF47ngf/98m9XdQITWuvBQocSQog/ZAX9I4dKqSeBW4EqpVQ/8DdAKYDW+mFgO/A14AQwCfz7wiQVQgiRUtDCobX+7ue8r4H/uEhxhBBCXIOlfqtKCCHEEiOFIweJRKLQEQCuOCSlEEJcLzKQUw7Onz/PD3/4Q+rq6mhsbMTj8dDY2EhNTU1ehoG8Vnv27OHNN9/E6/Uarb6+PqexrRfi1Vdf5eLFi/j9fnw+Hw0NDYs+mJHWmm3btmGz2QgEAni93oIMZBSPx3n55ZdpbGykubkZp9O56Bng0oh3hw4doqWlhbq6uoINctXf308oFKKpqamggzqdOnUKq9XKsmXLCjrg19mzZ6mtrV30YzSd1pqzZ8/i8Xiy7q+kcHyO2dlZxsfHGR8fZ2xsbN5jJBLh6NGjHD16FACbzcaWLVu444478rpTJJNJwuEwExMTjI+PMzExYUyPj49z6tQpTp06Zcxvs9m45557CAaDeT9AYrEY4XCYUChkPIZCIc6dO8fevXv5/e9/D0BJSQler5evf/3rrFmzJq8Z4NI2iUajRCIRo4XDYQYGBvjoo48AKCoqoqGhgUAgwKZNm2hsbPycn5o9rTUzMzNEo9GMduzYMV566SUAKisraWpqorm5mXXr1l23kei01kxNTTE5OWm07du3G0OmpjK0tLQQCASua8eVTCaZmpoy8jz44IPMzs7i9XppaWkx2mIU1WQyyfT0NGNjY/zd3/0dLpeL5cuXs3z5clpbW6mtrV20QqK15tixYzzwwAMEAgFWrFjBihUrrvvncSVvvvkmBw4coLW1NavlpHCkGR4e5vXXX88oDOFwOONWkNPpxO12U15ejsfjIRwOc/HiRXw+H1u2bGHDhg05f/iffPIJu3btyigQExMTGTlMJhNutxuXy4XL5cJsNjM9PY3H42Hz5s10dHTkfGa3f/9+jhw5Mq9AzMzMZMxnNptxOp3Y7XbjNbfbTU9PDz09PVRWVuaU45133qG/v59wOGwUh0gkwuTk5LzbdGazOWM8aZPJRHNzM8FgMOei8dxzzxEOh41ilV4krnTbsqTkXw6vcDhMSUkJHo8Ht9u94AzRaJRXXnmFaDRqdMjp01NTU1e9dTk5OcmxY8coLS2loaEhp6viwcFB3nvvPaMwzG3T09PEYrErLnv69GnOnDnDuXPniMfjtLW1LfjK9Pjx4xw6dIhYLMb09DRTU1PGdHqLx+MZy01MTLBnzx727NlDU1MTt99+O+vXr19w8fjggw84ffo0sViMmZkZYrGY0WZmZpienjZen5mZMT6jvr4++vr6ePHFF/F6vdx33320tLQsKANg9F/p656bJfWYnuPQoUNZrUcKR5rZ2VnOnj1LeXk5ra2tlJeXG0Ui1UmndwbJZJJf//rX/Omf/il+vz9vOaLRKIODg7jdblpbW3G5XLjd7nmFImVsbIyioiI2b95MU1NT3s6choeHuXDhAk6nE7/fj8PhwOl0Gi31PFUojx49yptvvsmmTZu48cYb83a7rr+/n4sXL2K32/F4PNjtdqM5HI6M5yUlJcZZVDAYZP369Xk7izt58iRKKWw2G3V1ddhsNqPZ7faM51arlSeffJJz587R09PDhg0b8nKLJplMcvz4caxWK1arlaqqKrxer/H8Su2hhx4ikUjQ1dVFe3t7RoFfqEgkQm9vLxaLBYvFgtvtpq6uDovFgtlsNl5PNZPJxP/4H/8Dt9tNZ2cnHR0dORXQlOHhYfr6+ox12Gw2KisrMZvNxklEatpsNjMzM8PDDz9MTU0Nt9xyCx0dHeTjL02cPXuWEydOUFZWhslkMrKkPzeZTJSVlWE2mzl//jwvvvgilZWVtLe3097eTkNDQ87H7okTJ5iYmDDWZTKZcDgcGc/TMx05coT333+fhoYr/iWnq1Jfxi9W29ra9N69ewsd4w9OMplc1O92rmZqagqLxVLoGIyNjV23W1LXanZ2lgsXLlBfX1/QHKmrVY/HU9Ac/f39xu2yQn7HcfjwYSwWS15P9BZi9+7dNDY2Ul9fj1LqQ61127UsJ4VDCCFEVoWj8KeHQgghvlCkcAghhMiKFA4hhBBZkcIhhBAiK1I4hBBCZEUKhxBCiKxI4RBCCJEVKRxCCCGyIoVDCCFEVqRwCCGEyIoUDiGEEFmRwiGEECIrUjiEEEJkRQqHEEKIrEjhEEIIkZWCFg6l1J1KqY+VUieUUn95hff/nVJqSCl14HL7D4XIeTXJZLLQEYQQYtEVbOhYpVQx8CDwR0A/sEcp9bzW+uicWX+ltf6LRQ94DQYGBti6dSsNDQ14vV4aGxvxer24XK5FzbFnzx7ef/99fD4ffr8fn8+Hy+Va9JHF3njjDUZGRvD7/QQCAZYtW7boGbTWvPzyyzgcDpqbm6mtrS3IqITxeJydO3fS1NSU8/jeuZiYmGBwcJCmpibKysoKkgFgaGgIgKqqqoKOeNff34/dbs/LsLW5+Pjjj6mpqSloDq01H374IYFAgIqKiqyWLeSY4x3ACa31SQCl1FPAN4G5haOgEokEoVCI8fFxJiYmMh5T7eLFi+zfvx+AsrIyvvrVr3LnnXfmbaxruPQhRyIRwuEwExMTxlCcqWxHjhzhyJEjxvxut5tvfOMbBIPBvB+osViMcDhs5Em1gYEBdu/ebcxntVoJBAJs2bKFNWvW5DUDXNomk5OTRKNRIpEIk5OTRCIRzp49y759+wAwm80EAgGamppYv379dRu6VGtNLBZjamqKqakpJicn2bt3L0888QRms5nm5mZaWlpoaWnB7/df9048kUgQi8WIx+M89thjTExM4Pf7Wb58OcuXL6e5uRmTyXRdM6Qkk0mSySR/+7d/i8PhYMWKFUarrKxclAxaaxKJBKOjo/y3//bfqK6uNjIsX758UU72Uhmmp6c5ceIE//AP/0B1dTWtra1Gjus91LDWmpmZGaanp5menmbfvn385Cc/yXq9hSwcDcDZtOf9wC1XmO9bSqlNQC/wn7TWZ68wT14MDQ3x8ssvG8VhYmKCcDicMY/NZsPlcuF2uykvL8fpdDI8PExtbS233nornZ2dOY933dfXx86dOzMKRDgczrg1VlRUhNPpxOFw4HK5MJlMxGIx3G43wWCQYDCY8064d+9eDh06NK9AxOPxjPlKSkpwOBzY7XbjNZvNRmdnJ8FgMOfxrt944w3Onj1LJBIhGo0abXJykrlDHxcVFWE2m43niUQCu91Oa2trzjmeeeYZwuGwURxSBSI1fbVhmKenpzly5AiTk5NYrVYaGhoWXDii0SgvvPACsVjMOPhTLfVaLBYjkUjMW/aTTz7hk08+YdeuXXR1dXHHHXdkbKtsDAwM8O677xKLxYw2MzNzxefpWcbGxti1axe7du3C4XBw5513ctttt1FcXLygHEePHuXgwYPGvzvVKc7NEovFMj6fixcvcvHiRd59911qa2v54z/+YzZs2LDgk6ydO3dy8uTJjM8gfTr1OPf2dirH+++/z6pVq/ja175GS0vLgjIAvPTSS4yMjBj7xNTUVMbj9PT0FffTsbGxrNZTyMJxLV4AntRax5RSfwY8Bmy50oxKqfuB+wG8Xu+CVqa1ZmRkBLfbjcfjwe1243a7jULhdDozriJmZ2d54okn6OjoYPny5Xk7s4/FYoyPj+N0OmloaMDpdBrN5XIZnXRqfSMjIzz11FMEg0FuvPHGvN0WSRUsh8NBbW0tTqcTu92Ow+Ewmt1ux2QyoZTiyJEjvPbaawSDQdatW5e3K67h4WEikQg2m43q6mpsNhs2mw273W5Mp56bTCbefvttdu3aRXd3Nx0dHVit1rzkOHfuHAAWiwWn04nVasVisRjNarVmvPbiiy9y9OhROjs76ezspKamJucMyWSS06dPYzKZMJvNuFwuampqMJvNxmupx1R76qmnGBoaYsOGDdxyyy20tLTkvK9OTU1x5swZysrKMJvN2Gw2KioqMJlMmEwmysrKjGmTyURpaSmPPPIIyWSS9evX09HRwYoVK3LeV8fHx+nv7zfW43Q6WbZsWca609vMzAw//elPKS8vp729nY6ODjweT87bY2hoiAsXLhjbP3Uyd6XPxWQy0d/fz9NPP01TUxMdHR1s2LABp9OZUwaAwcFBwuGwsY9WV1djsVgy9ofUc4vFwvvvv8+7777LunXr2Lp16zWvR13tLOl6U0p1Af+f1vqOy8//CkBr/XdXmb8YGNVaf+41ZVtbm967d28+4y5pWuuC3jdOSSQSlJQU/lwkVewK7fTp03i93oJ+NolEgiNHjnDDDTcU9LMZHR3l9OnTrFmzJq+3cLN15swZYrFYXopnLvr6+nC73SxbtqxgGQB6e3vx+Xypk78PtdZt17JcIQtHCZduP30FGAD2AP9Ga30kbZ46rfXg5el7gP+ite78vJ/9h1Y4hBAiV9kUjoKdgmitE0qpvwBeBYqBR7TWR5RSfwvs1Vo/D/xfSqm7gQQwCvy7QuUVQghxScGuOK4nueIQQojsZHPFIf9zXAghRFakcAghhMiKFA4hhBBZkcIhhBAiK1I4hBBCZEUKhxBCiKxI4RBCCJEVKRxCCCGyIoVDCCFEVqRwCCGEyIoUDiGEEFmRwiGEECIrUjiEEEJkRQpHDqampuYNBVkIX8a/cCyEWLoKP1zbF1goFOKBBx6gurqaxsZGozU0NGAymRYtx969e3nllVfw+Xx4vV58Ph8ej2fRR1p75ZVXGBwcxO/34/f7C5JBa82LL76I3W6nqakJj8ez4PGscxGPx3n99dfx+Xw0NTXlPA79Qo2NjXH48GFaW1upqakp2Kh3/f39jI+P09zcXLBtAZdGvFNK4ff7CzoS4d69e3E6nQQCgYLlSCaTvPnmmzQ0NNDU1JTVslI4PoPWmmg0ytjYGOPj44yPj8+bjsVinDp1ilOnTgFQUVHBrbfeypYtW/K6Q8RiMSYmJq7a+vv76e/v57333gPAZrNxzz33EAwG89pZzM7OEolECIfD89rg4CAHDhxg165dABQXF9PY2Mgf//Efs2bNmrxlSEkkEkQiEaLRaEbr7+/nwIEDAJSWluL3+42xnT0eT95zaK2JxWJMTk5mtMOHD7Nt2zaUUjQ0NNDS0kJzczMrV67My/jSVzI7O8vU1FRG2759O6Ojo9jtdlpaWmhtbaWlpQWv15u38enn0lozMzPD9PQ009PTRCIRHnroIWZnZ2lsbKS1tdVodrv9umRI5YjFYkxPTzM1NcXw8DCPPfYYJSUlBAIBWltbWb58OU1NTdftZC99W6Q+k9OnT/Paa69RUlKCz+cztsX1LKzxeJypqSlj/5yamqK3t5dnnnkm6z5CCkeaCxcu8MILL2QUiEQiYbxvMplwu92Ul5fjdrvxer0cOHCAwcFBVq1axW233caNN96Y88H48ccfs2PHjozCEIvFMuZxOBy4XC5cLhdutxuz2cz09DRer5fNmzfT3t6e84Gwa9cuDh48mFEcotFoxjxKKRwOBw6HA5vNZrxeWVlJMBiku7sbt9udU46XX36ZM2fOMDk5mVEoZmZm5s1rMpkoKyvLyFdVVcWaNWtoaGjIKceTTz5JKBTKOPhS7Uq3C1MHo9aac+fOUVlZSWlpKVardcEZwuEwv/3tb+cVh1SLx+NXXTYSiXDw4EHi8ThOp5P6+vqMbZWNs2fP8tZbbxmFIdUppj+/2i3UM2fOcPbsWQYGBpienqajo2PBV4UfffQRH374IbFYbN76p6am5h03KYlEgr6+Pj799FPOnz9PIpFgzZo1Cz7J2rFjBydOnJj3eaRyXO2WdiKR4JNPPmFkZIRkMkl5eXlO++lzzz3H0NBQRnFIPab3ZXNle7tbCkeaoqKsxZupAAAgAElEQVQiYrEYdXV1rF69OqNIlJeXYzabM+ZP7Qx//ud/Tm1tbd5yzM7OkkgkqKurY+XKlUaBSDWHw5FxoI2OjlJUVMSmTZvw+Xx5u8KIxWJoramrq2PFihU4HA7sdjtOpzOjWKTWd/jwYex2O8FgkFWrVuXtbDbVMVdVVeHz+bDZbNjtdqxWK3a7HZvNhs1mw2q1UlpayhtvvMG+ffvo6elhw4YN8z63hZqYmAAuXVV6PB6sVitWqxWLxYLNZsNisRivWa1WfvWrX3H69Gm6urpob2/H4XDknEEpxejoKBaLhYqKCsxmMxaL5TPbQw89RDwep7Ozk/b2dlwuV845EokE4+PjmM1m3G43FosFk8mExWLBbDYbLfW8pKSE733ve1RWVnLLLbfQ3t6e8wkFwPT0NOFwGIvFQmVl5bz1pzKksk1OTvIP//APtLa20tnZyc0335xTIU+JRCJMTU1hNpuNviL9M5j7vK+vjyeffJKbb76Zzs5OVqxYkZfjJRQKkUgkcLvd1NXVGftn+r6a/vj666+zZ88eOjs72bp16zWvR4aOFXmjtS7YPfR0k5OTeekMcjU8PExVVVVBMyQSCS5cuJDz1VauQqEQkUiE+vr6gua4cOECpaWlVFRUFDRH6gp0Mb8LvZILFy5QXV2NUiqroWOlcAghhJAxx4UQQlw/WX3HoZQqB+qBKeCU1rrw/4lBCCHEovrcwqGUcgH/EfguUAYMAWagRim1C/iR1vrt65pSCCHEknEtVxzPAI8DG7XW4+lvKKXagP9NKdWktf7Z9QgohBBiafncwqG1/qPPeG8vsOBvoZVSdwI/AIqBn2qtH5jzvolLRWsDMALcp7U+tdD1CSGEyN01fzmulHrzWl7L4ucVAw8CdwGrge8qpVbPme1PgTGtdQvwfeDvF7o+IYQQ+fG5hUMpZVZKVQBVSqlypVTF5eYHcvnl8A7ghNb6pNZ6BngK+Oaceb4JPHZ5+hngK2op/EcBIYT4A3Yt33H8GfB/c+m3qT4EUh13CPhhDutuAM6mPe8HbrnaPFrrhFJqAqgEhnNYrxBCiBxcy3ccPwB+oJT6P7XW/7wImRZEKXU/cD+A1+stcBohhPjyupZbVUGAqxUNpZRTKbWQP306ADSmPfdcfu2K8yilSgAXl74kn0drvVVr3aa1blu2bNkC4gghhLgW13Kr6ltKqe8Br3DpVlXq/3G0ALcBPuD/WcC69wCtSqkAlwrEd4B/M2ee54F/C7wP/GvgLf1l/BspQgjxBXItt6r+0+Uvx78FfBuo5dL/HD8GPKy1fm8hK778ncVfAK9y6ddxH9FaH1FK/S2wV2v9PPAz4BdKqRPAKJeKixBCiAK6pj85orUeVUo9DkwC/rTlvgIsqHBc/rnbge1zXvt/06anuVSshBBCLBHZ/K2qbcA4sA+Yvj5xhBBCLHXZFA6P1vrO65ZECCHEF0I2f1Z9p1LqxuuW5Avos4bHXExXG5ZysS2FbSGEuP6u5a/jHgL05Xn/vVLqJBDj0n8E1Frrtdc34tI1MTHB3//931NbW0tjYyNer5fGxkbq6+spKVm8UXk//PBDtm/fjtfrxev14vP5aGxsXPTRxV588UU++eQT/H4/Pp8Pn89HeXn5oo4KqLXm0UcfJR6P4/P58Pv9eL3eRR8RMBaL8dOf/pTKykr8fj+BQMAYaW0xjYyM8MwzzxgZfD5fQUad6+3tZd++fTQ3N9PU1ERFRUVBRovcu3cvIyMjNDU14ff7KS0tXfQMcGmMcpPJREtLS8G2RTKZ5K233sLj8RAIBLJa9nNHAFRK+T7rfa316azWuAjyNQJgMpkkHA4zPj7O+Pg4ExMTjI2NMTExYTxPDXSf4nK5uPXWW/mjP/qjvO2UWmui0SgTExOEQqGMx1Tr7e3NWMZms3HPPfcQDAbztlNqrZmcnCQUChEOhwmFQhltaGhoXo7q6mruu+8+1qxZyH/1uXqOaDRqrDeVJfXY39/P6dOZu2VLSwvf+c53aGxsvMpPXViOyclJwuGw0SKRiDFM6rFjxzh//rwxv9ls5sYbb+Rb3/oW5eXlec0Ri8WIRCJXbDt37jTGSy8qKqK+vp41a9Zw11135W089pR4PE4kEiEajWa0cDjMSy+9ZBwrTqeTpqYmbrjhBnp6eiguLs5rjtnZWSYnJ5mcnCQajRqP58+fZ/v2S7+PU1xcjNfrpbm5mVWrVnHDDTfkvQPXWjM1NcXU1BSTk5PG45EjR9ixYwcAbreblpYWWlpaWLFixXUZXldrzczMjJEl1d555x0++ugjioqKePjhh695BMBr+XXcJVcYrpcLFy7w7LPPZhSG9MKaGoje5XLhdrtpbGwkkUhw/vx5li9fzq233sq6detyPgiOHTvGW2+9ZRSFUCiUcTuqqKgIl8uF0+nE5XJRU1PDmTNnmJ6eJhAIsGnTJtra2igrK8spx3vvvce+ffsyOujZ2VnjfaUUdrsdh8OB0+nEbrcb76VybNiwIecz3Oeff56TJ08ahSESiWRsj7k5LBaL8d6qVavYtGkTa9euzfkq8NFHH2V8fDyjOMy9TWg2m41tUVRUZORbtWoVGzduzDlHKBTiV7/61bzikH7yApc6Rbvdjt1uz9iHly9fTjAYZN26dTmd2Jw+fZpXXnnFKAypYhGPx+fNazabsdvtGZ1ybW0t69atY/369TkdL/v372f37t0ZxWFycpJYLDZv3qKioowrz9nZWYqLi6mvr6elpSWnovHmm2/S29ubURxSnfOVTs7T94Hx8XFGR0cpLi7G7XYvOAPA008/zdDQ0LwCMTU19Zm3tLO93b1491O+AIqLiyktLaW5uRm3253RXC7XvA5wdnYWrTV/9md/ltezBKUUJpOJ1tbWjAKRmrbZbBk7+ejoKACbN2/O6xk1XLpyqaurw+l04nQ6jc45NZ3qHOFSwXM6nWzcuBGPx5PXHG63G6/Xm5EhvWCl53jnnXfw+/0Eg0Hy/VcEUreeHA4HDocDu91uZHA4HBkdwlNPPcW6devo6emhqqoqL+svLi4mkUhQVVWF3+83ikOqpTKZTCaUUmit+cEPfkAwGMxrDrh0FltdXY3NZjOa3W7PeG6z2SguLmZqaooHHniA9evX09XVRXV1dV4yJJNJlFLU1NRgtVqx2WxXfTSZTJw7d45//ud/pqurK685EokEJSUl1NbWYrFYsFqtWK1WY9pisWCz2bBYLFgsFg4ePMizzz5LZ2cnnZ2d1NTU5CVHPB6nrKwMl8tlrOuz2uuvv84HH3zALbfcwtatW695PZ97q+qLKF+3qsQXk9a6IPeMl2IOrTVa64zCWgjxeJzi4uKC54hGo1gsloLnGBsbw+12F3z/OH/+PDU1NSilUErl71aVEF80hT4YU5ZCjssdQqFjFOxL6LlsNluhIwDk9TuuXNTW1i5oucKWXSGEEF84UjiEEEJkRQqHEEKIrEjhEEIIkRUpHEIIIbIihUMIIURWpHAIIYTIihQOIYQQWZHCIYQQIitSOIQQQmRFCocQQoisSOEQQgiRFSkcQgghsiKFQwghRFakcAghhMhKQQqHUqpCKfW6Uqrv8uMV/zi9UmpWKXXgcnt+sXN+nvRhVAtpqQzGtVRyCCGur0IN5PSXwJta6weUUn95+fl/ucJ8U1rrdYsb7doNDg7y0EMP4fF48Pl8+Hw+vF4vDodjUXPs3buXV155xcjg9/tpaGjIeYztbL344ov09vbi9/uNHJWVlYs6kJDWmkcffZSZmRkjg8/nyxhrejHEYjEeeughysvL8fv9BftMhoeH+fnPf47H4yEQCOD3+6murl70wZ2OHz/Oyy+/bGTw+/05j6+9EL/73e84cuQIgUCAQCCAz+fLGKN+sWzbto3JyUkCgQBNTU0sW7Zs0T+TZDLJr371K9xuN83NzVktW5ChY5VSHwO3aq0HlVJ1wDta6xVXmC+itbZn+/PzNXRsMpkkEokQCoWYmJggHA4zMTFhPA+FQpw8eZJ4PG4sU1payle/+lXuuuuuvI16lkwmCYfDhEKhq7bjx49nLGOz2bjnnnsIBoN52yFnZ2cJh8NGlrmPw8PDnDhxImOZ6upq7rvvPtasWZOXDFfLkd7Onj3L2bNnM5ZpbW3lvvvuy+uY7IlEYt6601tfXx9DQ0PG/CUlJdx00018+9vfzusIcDMzM4TDYSKRiLFNUtPhcJhDhw4RiUSM+a1WK11dXdx9992Yzea8ZNBaE4vFMtY7t3344YckEgljGbfbze23386WLVsoLi7OW47p6Wljnel5IpEIo6Oj7Nu3z5hfKUVdXR1f//rX2bBhQ96OFa01MzMzRCKRK7YzZ85w+PBhY36bzUYgEOCuu+6ipaUlLxlS4vE40Wj0iu3QoUP09fUBsHXr1iU/dGyN1nrw8vR54GojtZuVUnuBBPCA1vq56xlqcHCQp59+OqNQpBfW4uJinE4nLpcLp9NJdXU1IyMjDA8PU1NTw+bNm+ns7Mx5eMojR47w+uuvG0UhEolcMYfT6cThcFBZWYnJZCIWi9HY2MimTZvo6OjIuVPYsWMHe/bsMTqjaDSa8X5xcTEOh8PIkt4ZtrS0sHHjRjZs2JBzAf3Nb37DyZMnjSIxOTmZ8X5RUZGxLRwOR8b2X716NRs3bmTt2rU5n+1v3bqV8fFxY3tMT09fNYfdbje2f1FRETfddBPBYJDVq1fnNN71xMQE/+t//a+M4hCLxTLmKSkpwW63G9vDbDYTiUQoLS2lvb2dYDBIU1NTTp3kp59+ygsvvGCcWEUikYwTKLh0EpXKYLfbKSsrI5FIYLPZ6OzsJBgMUl9fv+AMcOlq+/e//31GkZh7C7msrMzI4HA4UEqhtaa8vJxgMEh3dzcVFRU55Xj11Vc5evRoRnFIL5JwaT+w2WzGtkgpLy+nu7ub7u5uqqqqcsrxy1/+kgsXLhiF4UqfC4DJZMqpn7puhUMp9QZwpQFt/zr9idZaK6Wudtnj01oPKKWagLeUUoe01p9cZX33A/cDeL3eBWVO7WAejyejQKSmLRZLxsGWSCR46qmn6OjooLW1NW9nK6WlpcYtjlTH7HK5jGmr1ZqxrpGREQA2bdqEz+fLW46ysjJqampoaWkxOsTU9nA6nfO2x9GjR3E6nXnpENKZzWbq6+tZsWKFkSHVITkcjnnb45133iEQCBAMBnM+ENNZrdZ5605vc7fH008/TVtbG93d3TidzrxkKC0txWw2s2zZsnnrt9vtOJ1OTCaTkUNrzdatW7njjjtob2/P222ZkpISHA4H9fX189af6qDLysqMHJFIhEcffZTOzk5uvvnmvN2yKy0tpaKiwrhFnF4g0nOknDp1irKyMoLBIKtWrcqpiM/NUVVVhd/vx263Gy1VKOx2e8b+8f777/PRRx/lPYfJZKK6uhq73Y7VajXWP3c6tf1/85vfMDQ0RE9PD1u3br3m9SzpW1Vzlvk58KLW+pnP+/n5ulUlRC601ot+33opZpAc8yWTybwVi1zE43HjjoBS6ppvVRUq+fPAv708/W+BbXNnUEqVK6VMl6ergB7g6KIlFCJHS6GDWgoZQHLMtRSKBrDg28iFSv8A8EdKqT7g9svPUUq1KaV+enmeVcBepdRB4G0ufcchhUMIIQqsIF+Oa61HgK9c4fW9wH+4PL0TuHGRowkhhPgcS+N6SQghxBeGFA4hhBBZkcIhhBAiK1I4hBBCZEUKhxBCiKxI4RBCCJEVKRxCCCGyIoVDCCFEVqRwCCGEyIoUDiGEEFmRwiGEECIrUjiEEEJkRQqHEEKIrEjhyEEhBsG6kmQyWegIwNLYHlrrJZNDiC+rQo05/qXQ39/PI488gtfrxe/3EwgE8Hg8eRsW81rt27ePl156Cb/fj8/nw+/3FyTHiy++yNGjR40Mfr+fmpqaRR8852c/+xlTU1PGZ+Lz+XA4HIuaYWZmhgcffBCXy2XkaGxszHn89WwNDw/zyCOP0NjYaOQoxGdy/PhxXnrpJQKBgNHcbveiZgDYsWMHhw8fNjL4/X5jbPjF9OyzzzIxMUEgEKCpqYmGhoZFP16TySSPPPIINpuNQCCQ1bIFGTr2esvX0LHJZJJIJEIoFCIcDhuPqRYKhejt7SUWixnLlJaWcscdd3DnnXfmrZOIx+OEQqGMHHOf9/b2Zixjs9m45557CAaDeeskYrHYvG2R/jgyMsKpU6cyllm2bBnf+c53WLNmTV4yaK2JxWLzPof05+fOnWNgYCBjuebmZr773e/S2NiYtxzT09MZ6w2Hw0QiEWP65MmTDA8PG8sUFRVx88038+1vf5vy8vK85ZiamrpihtTj0aNHiUQixjJms5menh7uvvvuvHWaWmui0ei8dUciEWN63759JBIJYxm3283tt9/Oli1bKC4uzkuOZDJp5JibIRKJMDo6yv79+435lVLU1dXx9a9/nQ0bNuTtWJmdnc3IMbcNDAxw/PhxY/6SkhKampr45je/SUtLS14yACQSiYz1zs104sQJzpw5A8DWrVuveehYueJIMzg4yBNPPGF0RtFoNON9pRQOhwOHw4HT6cThcGCz2YjFYrjdboLBID09PVRUVOSU46OPPuKVV14xckxPT2e8X1ZWZqzf6XRSU1PD6dOnicVi+Hw+Nm7cSEdHByaTKaccb731Fh988IHRMc/MzGS8bzKZMnLU1tYahWPlypVs3LiRdevW5Xwm9etf/5oTJ04YHWM8Hp+XI/W5OBwO3G43AwMDKKW48cYb2bhxI2vWrMl5uM4HH3yQsbExozNK7wTTc9jtdmPfGB4epqSkhHXr1rFx40ZWrFiRU+c0Pj7Oo48+mlEk5t6qNJlMRgaHw4HZbCYSiWAymWhra2Pjxo34/f6ccnzyySf89re/zeiE5p6Ems3mjBwmk4lEIoHNZqOrq4tgMEhdXd2CMwDs3r2b3/3ud0aGycnJK+ZIfS52ux2lFFprysvL6enpobu7m8rKypxyvPjiixw5ciQjx1wWi8XIkX5M1NXV0dPTQ2dnZ85Xxj//+c8ZHBw0csztOwCsVquxLRZ64SCFI43JZKKmpoaWlpaMDjG149tstoyDLR6P84tf/IK2tra8dEwpVquVxsbGjPU7nU6jzS0IIyMjKKXYuHEjXq83LxkAHA4HgUBg3rZIPZaVlWXMf+zYMVwuF8FgkOrq6rzlcLvdtLa2ZnwWqWa32+dtjx07dtDc3Ex3d3fezuzh0tVTbW3tFTNcaXs8++yzdHR00NnZid1uz0uGsrIyKisr8fv9GetO76DTr3STySQ/+9nPuOuuu2hra8vbFYbZbKaurs7ogOZui7mdYyQS4bHHHqOzs5Obbropb7dlUsdKeo7UdKqlr+vTTz+ltLSUYDDIqlWr8nbMOp1O/H5/xnrTs9hstoyrqvfff59ly5bR09NDU1NT3q50ysvLsdls87ZBKsPcHNu2bWP58uX09PSwdevWa16P3KoS4ktMa73o32dIji9mDqXUNd+qkt+qEuJLbCl0TiA55vqi55DCIYQQIitSOIQQQmRFCocQQoisSOEQQgiRlYIUDqXUt5VSR5RSSaXUVb/FV0rdqZT6WCl1Qin1l4uZUQghxJUV6orjMPCvgB1Xm0EpVQw8CNwFrAa+q5RavTjxhBBCXE1B/gOg1voYfO6vgnUAJ7TWJy/P+xTwTeDodQ8ohBDiqpbydxwNwNm05/2XXxNCCFFA1+2KQyn1BlB7hbf+Wmu97Tqs737gfiCvf3ZDCCFEputWOLTWt+f4IwaA9D9l6rn82tXWtxXYCpf+5EiO6xZCCHEVS/lW1R6gVSkVUEqVAd8Bni9wJiGE+INXqF/HvUcp1Q90AS8ppV69/Hq9Umo7gNY6AfwF8CpwDPi11vpIIfIKIYT4F4X6rarfAr+9wuvngK+lPd8ObF/EaEIIIT7HUr5VJYQQYgmSwiGEECIrUjhE3iyFQcG01ksmx1KwVHKILxcZOjYH/f39PP300wQCAaM5nc5Fz7F3715+97vfZeRwu92LnuOll16it7cXv99f0Bw/+9nPiEQiRg6/34/L5VrUDPF4nH/8x3/E4XAYOXw+HxaLZVFzjI6O8uMf/5iGhgZjWzQ0NGQMH7oYjh8/zvPPP5+xj1ZUVCz6gEY7duzg0KFDRga/37/onwlcGlZ4YmKCQCBAU1MTDQ0NeRtO91qlhhW2Wq0EAoGslpWhYz9DMpkkGo0SiUSMx7nT+/btyxgQvrKykq6uLu68886MsZ9zEY/HjfWFw+F50+FwmP3792csU1FRwde+9jWCwWBeDk6tNdPT0xnrTLXU85GREU6cOJGxXE1NDffeey9r1qzJOQP8y2eSvv657fz58wwODmYs19zczHe/+10aGxuv8pOzzxGJRAiFQvO2R2qbnD59mtHR0Yzl1q9fz7333pu3sdATicQV94f06d7eXqLRqLFMaWkpmzZt4u67787bGORXypHewuEwBw4cYHZ21ljG6XTy1a9+lS1btuStkKUfK1dq4+PjHDhwwJhfKUVdXR1f//rX2bBhQ94K2czMzLy+Iv35uXPn+Pjjj435S0tLCQQC/Mmf/AnNzc15yaC1JhaLfWaOkydPcvbspT/QsXXr1mseOlauONKcO3eOX/ziF8bGnZycnDdPWVlZxuDvZWVlTE9PU1ZWRltbGz09PTQ3N+e0Ax48eJCXXnrJyBGLxTLeV0rNG4i+rKyMmZkZysvL6enpobu7m8rKygVnAHjjjTd4//33jRyJRCLj/bKyMhwOB3a7HYfDkXF1EQgE2LhxIxs2bMi5c3riiSfo6+szOqS5Jzs2mw2Hw2G0ZcuWMTg4SFFRETfddBPBYJDVq1dTVJTbndl//Md/ZHR01Djw0qV/Jqkcbreb0dFRY9/YuHEjgUAgp31jfHycH//4x0ZnPDU1NS9H+vZI7afRaBSr1cott9xCMBjE4/EsOANAX18fzzzzjLFvpJ88pXJYrVZje9jtdsxmM9FoFIfDQVdXFz09PdTWXumPS1y7nTt38s4773zmsZLKkdoWSim01lRUVNDT00NXV1fOx8q2bds4dOiQkSMej39mjvRCWVdXR09PD52dnTgcjpxy/OQnP+HcuXNGYUgv1ABFRUXYbLaMbbEQUjjSWCwWfD7fvE45taHtdnvGVcTMzAwPP/wwN998M+3t7Xk7e3M4HLS2tmZ0ROmPFosloxO8ePEiSimCwSCrVq3KuYNMqaio4IYbbsjoDNNzmEymjPmPHDmCy+Wip6eHhob8/Vmx2tparFYrDocDp9NpZHA6ndhstnlnqzt27KC5uZnu7u683jr0er00Nzcb//70LDabbd52f+655+jq6qKjoyNv+4bJZDL20St9JnNzJJNJHnvsMb7xjW+wfv36vF0F22w2mpub5+2j6cdMeo5wOMwvfvELurq6WLt2bd6uMNxuN8uXL593zKaa1WrNyHHy5EnKysro6elh5cqVeTtWqqqqWL169bz+IvV8bo6dO3dSXV1NT09PzicT6RoaGli2bFlGjvQ8FoslY13btm1j5cqVdHd3s3Xr1mtej9yqyoHWekkMOr9UcghxNUtlH5UcV8+hlLrmW1XyW1U5WAofPCydHEJczVLZRyVHpoXmkMIhhBAiK1I4hBBCZEUKhxBCiKxI4RBCCJEVKRxCCCGyIoVDCCFEVqRwCCGEyIoUDiGEEFmRwiGEECIrUjiEEEJkRQqHEEKIrEjhEEIIkRUpHEIIIbIihUMIIURWpHAIIYTISkEKh1Lq20qpI0qppFLqqgOHKKVOKaUOKaUOKKWu/8hM4gtPaz1vaNlCSCaTSybHUrAUtgUsnRxLQS7HSqGGjj0M/Cvgx9cw721a6+HrnGdBBgYGeO2112hubqalpYW6urqCDNCyf/9+du/eTXNzM01NTXi93rwNEZqN7du3c+rUKZqammhqasLn880bXnYxPPLII0xNTREIBAgEAvj9fqxW66JmmJ2d5fvf/z42m83IUIgc4+Pj/NM//RP19fVGDq/Xu+ifS29vL08//bTxmQQCAWpraxf9ePnd737HgQMHCAQCNDU1EQgEsNvti5oB4Ne//jUjIyNGjkIcK1prfvjDH6KUIhAIZLVsQYeOVUq9A/xnrfUVryaUUqeAtmwLR76GjtVaMzU1xdTUFJOTk0SjUWM61d5++22mpqYAsFqtNDU1sWrVKjZv3py3zjsejxONRq/awuEwO3fuNOYvKSnB6/XS09NDT09PXg7O1LaIRCJEIhFj3annkUiE4eFhjh07ZiyjlMLr9XL33XezZs2anDPApQ45tb5wOJyx/tRrg4ODDAwMZCzX2trKfffdR2NjY15yxGKxjAzhcDhjOhKJcPbsWcbGxjKWW79+Pffeey/l5eU5Z9BaMz09PS/D3OenTp1icnLSWK6oqIjbbruNu+++Oy9joc/dN9I/l/Qsx44dY3Z21ljOarXyta99jS1btuRlDPK5OdL31dT0+Pg4hw8fzliupqaGu+++mw0bNuTlWEkmk0Z/MTdLql24cIFPPvnEWCbVeX/rW9+ipaUl5wxwqd+42r6Zmh4YGGBoaAiArVu3XvPQsYW64rhWGnhNKaWBH2utr3009QUYGBjg5z//uVEUpqamrngpV1pais1mw2KxZLxeV1fHunXr2LBhQ05FY//+/bzwwgtG5xyPx+fNYzKZsFqtxmD0paWlxONxzGYz7e3tdHd3EwgEcjoQXn31VXbu3GnkmHvbo7i4GJvNht1ux263Z3RCNTU19PT00NnZicvlWnAGgMcff5y+vj7C4bBRpNNZrVYcDoeRw+12MzAwgFKK1atXEwwGWbt2LSUlue3u//2//3fGxsYIh8PMzMxkvFdcXGxkSD1WVFQwNjaGyWSivb2dYDCI3+/P6TMZGxvjwQcfNDqARCKR8X5ZWVlGDpfLhcvlYnJyEqfTSXd3Nz09PS18wggAAAd4SURBVFRXVy84A1y6gnjqqaeMHHP3jdLS0nnbw2w2E41GqaiooKenh+7ubioqKnLK8fvf/5433njDKBBzc5SUlBj7hd1ux2q1opRCa011dTXd3d10dXXhdrtzyvGb3/yGAwcOEIlEmJycnNdvlJaWZuRIP1Z8Ph/BYJD29vZ5fUq2fvSjHzEwMEA4HCYWi2W8V1RUlJHB4XBQWVnJ0NBQ1sfGdSscSqk3gNorvPXXWutt1/hjglrrAaVUNfC6Uuq41nrHVdZ3P3A/gNfrXVBmq9XKypUrsVqtWCwWozhYrdaMltrI8Xic733ve6xZs4bOzk5qamoWtN65ysvLWbt2LVar1eiYU9Oplv5BX7hwgSeeeILu7m5uvvlmysrK8pKjtraWDRs2ZBSHVKGy2+2YTKaMTvCjjz7C4XDQ09NDU1NT3m5D+P1+qqqqMjKkdnybzUZRUeZXde+88w5NTU156ZjSrVq1ipKSknkdosPhwGw2z/v3btu2je7ubtra2vJyZg9gsVhYvXq1sd5USz2f+9lrrfnlL3/Jn/zJn3DjjTfm5cwewOl0snbt2oztkP65zM0RDodJJpN0dXWxatWqeZ/ZQlVVVbF+/fp5+2iqlZX9/+3dXYgVdRzG8e/TbltUltFW1K5pxQqJGUnEitALhsheKFGEgZQhXSh1UREEXSR1U1hdBIkVSS9QWYGxpLUXZUTSWoIpKhS2mZmB0osU0svWr4sZa1vXzow7Z+acPc8HhDnnjOzzOzOH35n/f85Mx3+2y9DQEB0dHcydO5eenp7C9tGurq5jmsPIz8vo92NwcPCfL1fd3d2FZIDkyPro8Nvo/fRo0xxpYGCAWbNm0dvby+rVqzP/nYYeqhq17krgl4h4vNa6RQ1V1TI8PExbW1vlN56PiMozNFIOs+NplH20UXKMJCnzUFXDno4r6XRJk44uA/NJJtUbRnt7e0Ns/EbIAI2Tw+x4GmUfbZQcJ6qq03FvlLQfmANskDSQPn+hpI3paucDH0naDnwCbIiId6vIa2Zm/6pkcjwi1gPrx3j+ANCXLg8BV5QczczMamjYoSozM2tMbhxmZpaLG4eZmeXixmFmZrm4cZiZWS6V/gCwXiQdAr4+wf/eCTTkRRXryDVPfK1WL7jmvKZGxLlZVpyQjWM8JG3N+uvJicI1T3ytVi+45nryUJWZmeXixmFmZrm4cRyrrpdub1CueeJrtXrBNdeN5zjMzCwXH3GYmVkuLds4JC2Q9LmkPZIeGOP1UyStS1/fImla+SmLk6HeeyXtlrRD0nuSplaRs0i1ah6x3k2SQlLTn4GTpWZJt6TbepekV8rOWLQM+/ZFkjZJ2pbu331V5CyKpLWSDkoa8zYTSjyVvh87JM0uPEREtNw/oA34ErgE6AC2AzNGrbMCWJMuLwbWVZ27zvVeD5yWLi9v5nqz1pyuNwn4EBgkub995dnrvJ17gG3A2enj86rOXULNzwLL0+UZwN6qc4+z5muA2cDO47zeB7wDCOgFthSdoVWPOK4G9kTEUET8DrwGLBq1ziLgxXT5TWCemvfuKzXrjYhNEXEkfTgIFHc/y2pk2cYAjwCPAb+WGa5OstR8J/B0RPwIEBEHS85YtCw1B3BmunwWcKDEfIWL5PbZP/zPKouAlyIxCEyWdEGRGVq1cXQB34x4vD99bsx1ImIYOAycU0q64mWpd6RlJN9YmlnNmtND+CkRsaHMYHWUZTtPB6ZL2ixpUNKC0tLVR5aaVwJL0pvHbQTuLidaZfJ+3nOr5EZO1rgkLQGuAq6tOks9SToJeBJYWnGUsrWTDFddR3JU+aGkyyPip0pT1detwAsR8YSkOcDLkmZGxF9VB2tWrXrE8S0wZcTj7vS5MdeR1E5yiPt9KemKl6VeJN0APAgsjIjfSspWL7VqngTMBD6QtJdkLLi/ySfIs2zn/UB/RPwREV8BX5A0kmaVpeZlwOsAEfExcCrJNZ0mqkyf9/Fo1cbxKdAj6WJJHSST3/2j1ukHbk+Xbwbej3TmqQnVrFfSlcAzJE2j2ce9oUbNEXE4IjojYlpETCOZ11kYEVuriVuILPv1WyRHG0jqJBm6GiozZMGy1LwPmAcg6TKSxnGo1JTl6gduS8+u6gUOR8R3Rf6BlhyqiohhSXcBAyRnZayNiF2SHga2RkQ/8DzJIe0ekomoxdUlHp+M9a4CzgDeSM8B2BcRCysLPU4Za55QMtY8AMyXtBv4E7g/Ipr1SDprzfcBz0m6h2SifGkTfwlE0qskzb8znbd5CDgZICLWkMzj9AF7gCPAHYVnaOL3z8zMKtCqQ1VmZnaC3DjMzCwXNw4zM8vFjcPMzHJx4zAzs1zcOMxKIGmypBVV5zArghuHWTkmk1xx2azpuXGYleNR4FJJn0laVXUYs/HwDwDNSpDeCOztiJhZcRSzcfMRh5mZ5eLGYWZmubhxmJXjZ5JLuZs1PTcOsxKkV6DdLGmnJ8et2Xly3MzMcvERh5mZ5eLGYWZmubhxmJlZLm4cZmaWixuHmZnl4sZhZma5uHGYmVkubhxmZpbL3zgkjTuvF0vqAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from viz.plots import vector_field_plt\n",
    "\n",
    "vector_field_plt(odefunc, num_points=10, timesteps=10, \n",
    "                 h_min=-1.5, h_max=1.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create functions to approximate\n",
    "\n",
    "We will approximate two functions: an easy one (the identity mapping) and a hard one (correspond to g_1d in the paper)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from experiments.dataloaders import Data1D\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "data_easy = Data1D(num_points=500, target_flip=False)\n",
    "data_hard = Data1D(num_points=500, target_flip=True)\n",
    "\n",
    "dataloader_easy = DataLoader(data_easy, batch_size=32, shuffle=True)\n",
    "dataloader_hard = DataLoader(data_hard, batch_size=32, shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualize the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for inputs, targets in dataloader_easy:\n",
    "    break\n",
    "\n",
    "vector_field_plt(odefunc, num_points=10, timesteps=10,\n",
    "                 inputs=inputs, targets=targets,\n",
    "                 h_min=-1.5, h_max=1.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for inputs, targets in dataloader_hard:\n",
    "    break\n",
    "\n",
    "vector_field_plt(odefunc, num_points=10, timesteps=10,\n",
    "                 inputs=inputs, targets=targets,\n",
    "                 h_min=-1.5, h_max=1.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train a model on data\n",
    "\n",
    "We can now try to fit a Neural ODE to the two functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "from anode.models import ODEBlock\n",
    "from anode.training import Trainer\n",
    "\n",
    "data_dim = 1\n",
    "hidden_dim = 16\n",
    "\n",
    "# Create a model for the easy function\n",
    "odefunc_easy = ODEFunc(device, data_dim, hidden_dim, \n",
    "                       time_dependent=True)\n",
    "model_easy = ODEBlock(device, odefunc_easy)\n",
    "\n",
    "# Create a model for the hard function\n",
    "odefunc_hard = ODEFunc(device, data_dim, hidden_dim, \n",
    "                       time_dependent=True)\n",
    "model_hard = ODEBlock(device, odefunc_hard)\n",
    "\n",
    "# Create an optimizer and trainer for easy function\n",
    "optimizer_easy = torch.optim.Adam(model_easy.parameters(), lr=1e-3)\n",
    "trainer_easy = Trainer(model_easy, optimizer_easy, device, print_freq=5)\n",
    "\n",
    "# Create an optimizer and trainer for hard function\n",
    "optimizer_hard = torch.optim.Adam(model_hard.parameters(), lr=5e-4)\n",
    "trainer_hard = Trainer(model_hard, optimizer_hard, device, print_freq=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Train model on easy data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.032\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.029\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.016\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.018\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 1: 0.023\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.016\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.011\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.009\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.005\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 2: 0.009\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.005\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.005\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.003\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.003\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 3: 0.004\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.002\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.002\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.001\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.001\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 4: 0.002\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.001\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.001\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 5: 0.001\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 6: 0.000\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 7: 0.000\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 8: 0.000\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 9: 0.000\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.000\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 10: 0.000\n"
     ]
    }
   ],
   "source": [
    "trainer_easy.train(dataloader_easy, num_epochs=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualize model trajectories\n",
    "As can be seen, the learned vector field maps the inputs to targets correctly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for inputs, targets in dataloader_easy:\n",
    "    break\n",
    "\n",
    "# Plot 8 trajectories\n",
    "vector_field_plt(odefunc_easy, num_points=10, timesteps=10,\n",
    "                 inputs=inputs[:8], targets=targets[:8],\n",
    "                 h_min=-1.5, h_max=1.5, model=model_easy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Train model on hard data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.488\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.467\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.446\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.452\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 1: 1.443\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.397\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.400\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.378\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.338\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 2: 1.411\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.339\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.452\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.318\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.463\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 3: 1.386\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.363\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.339\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.343\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.318\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 4: 1.353\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.273\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.277\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.400\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.261\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 5: 1.320\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.342\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.392\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.213\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.199\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "Epoch 6: 1.284\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.245\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.280\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.252\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.209\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 7: 1.248\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.207\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.227\n",
      "NFE: 14\n",
      "BNFE: 0\n",
      "Total NFE: 14\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.248\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.067\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 8: 1.208\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.302\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.157\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.179\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.243\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 9: 1.176\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.234\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.171\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.090\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.180\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 10: 1.138\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.110\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.061\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.104\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.143\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 11: 1.099\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.107\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.115\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 1.065\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.077\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 12: 1.060\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.993\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.077\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.951\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.916\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 13: 1.019\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.131\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.021\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.932\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 1.064\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 14: 0.986\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.976\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 1.043\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.914\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.903\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 15: 0.945\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.940\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.773\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.959\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.807\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 16: 0.910\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 1.006\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.936\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.748\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.869\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 17: 0.879\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.855\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.865\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.876\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.839\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 18: 0.848\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.864\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.796\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.770\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.842\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 19: 0.820\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.818\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.790\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.764\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.756\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 20: 0.792\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.718\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.838\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.740\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.820\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 21: 0.770\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.822\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.761\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.651\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.687\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 22: 0.746\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.781\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.673\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.768\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.775\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 23: 0.728\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.711\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.822\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.686\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.731\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "Epoch 24: 0.711\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.616\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.705\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.608\n",
      "NFE: 20\n",
      "BNFE: 0\n",
      "Total NFE: 20\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.735\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 25: 0.693\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.648\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.657\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.596\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.713\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 26: 0.675\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.687\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.667\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.636\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.670\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "Epoch 27: 0.656\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.666\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.685\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.621\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.634\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 28: 0.639\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.716\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.559\n",
      "NFE: 26\n",
      "BNFE: 0\n",
      "Total NFE: 26\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.627\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.619\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 29: 0.623\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.641\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.599\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.569\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.579\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 30: 0.610\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.592\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.606\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.594\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.637\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 31: 0.600\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.616\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.612\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.608\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.553\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 32: 0.589\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.589\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.587\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.584\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.612\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 33: 0.582\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.543\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.579\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.558\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.591\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 34: 0.574\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.568\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.544\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.575\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.549\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 35: 0.567\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.542\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.585\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.545\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.566\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 36: 0.561\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.544\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.547\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.542\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.554\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 37: 0.556\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.541\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.561\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.566\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.550\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 38: 0.551\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.530\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.552\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.538\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.538\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 39: 0.547\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.541\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.546\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.545\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.546\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 40: 0.543\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.540\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.539\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.536\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.532\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 41: 0.539\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.539\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.536\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.534\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.533\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 42: 0.535\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.534\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.533\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.532\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.532\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 43: 0.532\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.530\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.533\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.525\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.535\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 44: 0.529\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.525\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.523\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.526\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.527\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 45: 0.526\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.530\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.522\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.519\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.517\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "Epoch 46: 0.523\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.527\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.527\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.523\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.518\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "Epoch 47: 0.520\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.504\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.509\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.522\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.528\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "Epoch 48: 0.518\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.510\n",
      "NFE: 32\n",
      "BNFE: 0\n",
      "Total NFE: 32\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.533\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.525\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.514\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "Epoch 49: 0.516\n",
      "\n",
      "Iteration 0/16\n",
      "Loss: 0.525\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 5/16\n",
      "Loss: 0.507\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 10/16\n",
      "Loss: 0.532\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "\n",
      "Iteration 15/16\n",
      "Loss: 0.505\n",
      "NFE: 38\n",
      "BNFE: 0\n",
      "Total NFE: 38\n",
      "Epoch 50: 0.514\n"
     ]
    }
   ],
   "source": [
    "trainer_hard.train(dataloader_hard, num_epochs=50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for inputs, targets in dataloader_hard:\n",
    "    break\n",
    "\n",
    "# Plot 8 trajectories\n",
    "vector_field_plt(odefunc_hard, num_points=10, timesteps=10,\n",
    "                 inputs=inputs[:8], targets=targets[:8],\n",
    "                 h_min=-1.5, h_max=1.5, model=model_hard)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Augmented Neural ODEs\n",
    "As can be seen, Neural ODEs struggle to fit the hard function. In fact, it can be proven that Neural ODEs cannot represent this function. In order to overcome this, we can use Augmented Neural ODEs which extend the space on which the ODE is solved. Examples of this are shown in the `augmented-neural-ode-example` notebook."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
